﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using BackusEntity;
using BackusEntity.BE;
using Backus.Log;

namespace Backus.Data
{
    public class InnovacionDAO
    {
        SqlConnection conexion;
        SqlDataAdapter comando;
        SqlCommand cmd;
        String errores;
        Conexion cn = new Conexion();

        LogManager logManager = new LogManager(System.Configuration.ConfigurationManager.AppSettings["LOG_FILE"].ToString());

        public int registraActualizaInnovacion(InnovacionBE innovacion)
        {
            int estado = -1;
            try
            {
                conexion = cn.Conectar();
                //conexion.Open();
                SqlTransaction tr = conexion.BeginTransaction();
                cmd = new SqlCommand("usp_RegistraActualizaInnovacion", conexion, tr);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@idInnovacion", SqlDbType.Int));
                cmd.Parameters["@idInnovacion"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idInnovacion"].Value = innovacion.idInnovacion;

                cmd.Parameters.Add(new SqlParameter("@titulo", SqlDbType.VarChar, 100));
                cmd.Parameters["@titulo"].Direction = ParameterDirection.Input;
                cmd.Parameters["@titulo"].Value = innovacion.titulo;

                cmd.Parameters.Add(new SqlParameter("@login", SqlDbType.VarChar, 10));
                cmd.Parameters["@login"].Direction = ParameterDirection.Input;
                cmd.Parameters["@login"].Value = innovacion.login;

                cmd.Parameters.Add(new SqlParameter("@colaborador", SqlDbType.VarChar, 100));
                cmd.Parameters["@colaborador"].Direction = ParameterDirection.Input;
                cmd.Parameters["@colaborador"].Value = innovacion.login;

                cmd.Parameters.Add(new SqlParameter("@fechaImplementacion", SqlDbType.DateTime));
                cmd.Parameters["@fechaImplementacion"].Direction = ParameterDirection.Input;
                cmd.Parameters["@fechaImplementacion"].Value = innovacion.fechaImplementacion;

                cmd.Parameters.Add(new SqlParameter("@situacionInicial", SqlDbType.VarChar, 300));
                cmd.Parameters["@situacionInicial"].Direction = ParameterDirection.Input;
                cmd.Parameters["@situacionInicial"].Value = innovacion.situacionInicial;

                cmd.Parameters.Add(new SqlParameter("@solicitudPropuesta", SqlDbType.VarChar, 300));
                cmd.Parameters["@solicitudPropuesta"].Direction = ParameterDirection.Input;
                cmd.Parameters["@solicitudPropuesta"].Value = innovacion.solucionPropuesta;

                cmd.Parameters.Add(new SqlParameter("@resultadoLogrado", SqlDbType.VarChar, 300));
                cmd.Parameters["@resultadoLogrado"].Direction = ParameterDirection.Input;
                cmd.Parameters["@resultadoLogrado"].Value = innovacion.resultadoLogrado;

                cmd.Parameters.Add(new SqlParameter("@score", SqlDbType.Decimal));
                cmd.Parameters["@score"].Direction = ParameterDirection.Input;
                cmd.Parameters["@score"].Value = innovacion.score;

                cmd.Parameters.Add(new SqlParameter("@etiqueta", SqlDbType.VarChar, 300));
                cmd.Parameters["@etiqueta"].Direction = ParameterDirection.Input;
                cmd.Parameters["@etiqueta"].Value = innovacion.etiqueta;

                cmd.Parameters.Add(new SqlParameter("@idSubProceso", SqlDbType.Int));
                cmd.Parameters["@idSubProceso"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idSubProceso"].Value = innovacion.idSubProceso;

                cmd.Parameters.Add(new SqlParameter("@idEquipo", SqlDbType.Int));
                cmd.Parameters["@idEquipo"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idEquipo"].Value = innovacion.idEquipo;

                cmd.Parameters.Add(new SqlParameter("@rutaArchivo", SqlDbType.VarChar, 1000));
                cmd.Parameters["@rutaArchivo"].Direction = ParameterDirection.Input;
                cmd.Parameters["@rutaArchivo"].Value = innovacion.rutaArchivo;

                cmd.Parameters.Add(new SqlParameter("@idInnovacionReferencia", SqlDbType.Int));
                cmd.Parameters["@idInnovacionReferencia"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idInnovacionReferencia"].Value = innovacion.idInnovacionReferencia;

                estado = cmd.ExecuteNonQuery();

                //if (estado != 0)
                //{
                //    tr.Rollback();
                //}
                tr.Commit();
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "InnovacionDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "registraActualizaInnovacion()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                cmd.Dispose();
            }
            return estado;
        }

        public List<InnovacionBE> obtenerInnovacionesPorCriterio(string titulo, int? idSubProceso, string fechaCreacion, string fechaHasta, int? idEquipo)
        {
            List<InnovacionBE> innovaciones = new List<InnovacionBE>();
            SqlDataReader dr=null;
            try
            {
                conexion = cn.Conectar();
                cmd = new SqlCommand("usp_ObtenerInnovacionesPorCriterio", conexion);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@titulo", SqlDbType.VarChar, 100));
                cmd.Parameters["@titulo"].Direction = ParameterDirection.Input;
                cmd.Parameters["@titulo"].Value = titulo;

                cmd.Parameters.Add(new SqlParameter("@idSubProceso", SqlDbType.Int));
                cmd.Parameters["@idSubProceso"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idSubProceso"].Value = idSubProceso;

                cmd.Parameters.Add(new SqlParameter("@fechaCreacion", SqlDbType.VarChar, 10));
                cmd.Parameters["@fechaCreacion"].Direction = ParameterDirection.Input;
                cmd.Parameters["@fechaCreacion"].Value = fechaCreacion;

                cmd.Parameters.Add(new SqlParameter("@fechaHasta", SqlDbType.VarChar, 10));
                cmd.Parameters["@fechaHasta"].Direction = ParameterDirection.Input;
                cmd.Parameters["@fechaHasta"].Value = fechaHasta;

                cmd.Parameters.Add(new SqlParameter("@idEquipo", SqlDbType.Int));
                cmd.Parameters["@idEquipo"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idEquipo"].Value = idEquipo;

                dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    InnovacionBE innovacion = new InnovacionBE();
                    if (dr[0].ToString() != null && dr[0].ToString().Trim().Length > 0)
                        innovacion.idInnovacion = Convert.ToInt32(dr[0]);
                    if (dr[1].ToString() != null && dr[1].ToString().Trim().Length > 0)
                        innovacion.titulo = dr[1].ToString();
                    if (dr[2].ToString() != null && dr[2].ToString().Trim().Length > 0)
                        innovacion.login = dr[2].ToString();
                    if (dr[3].ToString() != null && dr[3].ToString().Trim().Length > 0)
                        innovacion.colaborador = dr[3].ToString();
                    if (dr[4].ToString() != null && dr[4].ToString().Trim().Length > 0)
                        innovacion.fechaImplementacion = Convert.ToDateTime(dr[4]);
                    if (dr[5].ToString() != null && dr[5].ToString().Trim().Length > 0)
                        innovacion.situacionInicial = dr[5].ToString();
                    if (dr[6].ToString() != null && dr[6].ToString().Trim().Length > 0)
                        innovacion.solucionPropuesta = dr[6].ToString();
                    if (dr[7].ToString() != null && dr[7].ToString().Trim().Length > 0)
                        innovacion.resultadoLogrado = dr[7].ToString();
                    if (dr[8].ToString() != null && dr[8].ToString().Trim().Length > 0)
                        innovacion.score = Convert.ToInt32(dr[8]);
                    if (dr[9].ToString() != null && dr[9].ToString().Trim().Length > 0)
                        innovacion.etiqueta = dr[9].ToString();
                    if (dr[10].ToString() != null && dr[10].ToString().Trim().Length > 0)
                        innovacion.idSubProceso = Convert.ToInt32(dr[10]);
                    if (dr[11].ToString() != null && dr[11].ToString().Trim().Length > 0)
                        innovacion.idEquipo = Convert.ToInt32(dr[11]);
                    if (dr[12].ToString() != null && dr[12].ToString().Trim().Length > 0)
                        innovacion.estado = dr[12].ToString();
                    if (dr[13].ToString() != null && dr[13].ToString().Trim().Length > 0)
                        innovacion.fechaCreacion = Convert.ToDateTime(dr[13]);
                    if (dr[14].ToString() != null && dr[14].ToString().Trim().Length > 0)
                        innovacion.fechaActualizacion = Convert.ToDateTime(dr[14]);
                    if (dr[15].ToString() != null && dr[15].ToString().Trim().Length > 0)
                        innovacion.rutaArchivo = dr[15].ToString();
                    if (dr[16].ToString() != null && dr[16].ToString().Trim().Length > 0)
                        innovacion.idInnovacionReferencia = Convert.ToInt32(dr[16]);
                    innovaciones.Add(innovacion);
                }
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "InnovacionDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerInnovacionesPorCriterio()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                cmd.Dispose();
                dr.Close();
            }
            return innovaciones;
        }

        public int obtenerIdMaxInnovacion()
        {
            DataTable dt = new DataTable();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerIdMaxInnovacion", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.Fill(dt);
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "InnovacionDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerIdMaxInnovacion()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                dt.Dispose();
            }
            return Convert.ToInt32(dt.Rows[0][0]); ;
        }
    }
}
